home *** CD-ROM | disk | FTP | other *** search
/ Amiga Plus 2002 #11 / Amiga Plus CD - 2002 - No. 11.iso / amigaoscd / amigapluscd / AP-Website / news / admin / phpmyadmin / lib.inc.php < prev    next >
PHP Script  |  2002-01-27  |  24KB  |  623 lines

  1. <?php
  2. /* $Id: lib.inc.php,v 1.62 2000/07/20 11:15:11 tobias Exp $ */
  3.  
  4. require("config.inc.php");
  5.  
  6. function show_table_navigation($pos_next, $pos_prev, $dt_result)
  7. {
  8.     global $pos, $cfgMaxRows, $server, $db, $table, $sql_query, $sql_order, $sessionMaxRows, $SelectNumRows, $goto;
  9.     global $strPos1, $strPrevious, $strShow, $strRowsFrom, $strEnd;
  10.  
  11.     ?>
  12.      <!--  beginning of table navigation bar -->
  13.      <table border=0><tr>
  14.         <td>
  15.         <form method=post
  16.           onsubmit ="return <?php  echo ( $pos >= $cfgMaxRows ? "true" : "false" ); ?>"
  17.           action=<?php echo
  18.           "\"sql.php?server=$server&db=$db&table=$table&sql_query=".urlencode($sql_query)."&sql_order=".urlencode($sql_order)."&pos=0&sessionMaxRows=$sessionMaxRows\"";?>
  19.         ><input type=submit value="<?php echo $strPos1 . " <<" ; ?>" >
  20.         </form>
  21.         </td>
  22.         <td>
  23.         <form method=post onsubmit="return <?php  echo ( $pos >= $cfgMaxRows ? "true" : "false" ); ?>"
  24.           action=<?php echo
  25.           "\"sql.php?server=$server&db=$db&table=$table&sql_query=".urlencode($sql_query)."&sql_order=".urlencode($sql_order)."&pos=$pos_prev&sessionMaxRows=$sessionMaxRows\"";?>
  26.         ><input type=submit value="<?php echo $strPrevious ." <" ; ?>"  >
  27.         </form>
  28.         </td>
  29.     <td>
  30.          
  31.     </td>
  32.     <td>
  33.         <table><tr><td>
  34.           <form method=post onsubmit="return isFormElementInRange;"
  35.             action=<?php echo
  36.                 "\"sql.php?server=$server&db=$db&table=$table&sql_query=".urlencode($sql_query)."&sql_order=".urlencode($sql_order)."&pos=$pos&sessionMaxRows=$sessionMaxRows\"";?>
  37.           >
  38.               <input type=submit value="<?php echo "> ". $strShow ; ?>"
  39.                  onclick="checkFormElementInRange( this.form, 'pos', 0, <?php echo ( $SelectNumRows - 1 ); ?> )"
  40.               >
  41.               <input type="text" name="sessionMaxRows" size="3" value="<?php echo $sessionMaxRows ; ?>">
  42.               <?php echo $strRowsFrom ?> <input name="pos" type="text" size="3"
  43.                       value="<?php echo ( $pos_next >= $SelectNumRows ? '' : $pos_next )  ; ?>">
  44.           </form>
  45.         </td></tr></table>
  46.     </td>
  47.     <td>
  48.         <form method=post
  49.           onsubmit="return <?php  echo
  50.           ( isset($SelectNumRows) && $pos + $sessionMaxRows < $SelectNumRows && mysql_num_rows($dt_result) >= $sessionMaxRows  ?
  51.                     "true" : "false" ); ?>"
  52.           action=<?php printf (
  53.           "\"sql.php?server=$server&db=$db&table=$table&sql_query=%s&sql_order=%s&pos=%d&sessionMaxRows=%d&goto=%s\"", urlencode($sql_query),urlencode($sql_order),$SelectNumRows - $sessionMaxRows, $sessionMaxRows, $goto);?>
  54.         ><input type=submit value="<?php echo ">> " . $strEnd  ; ?>"  >
  55.         </form>
  56.         </td>
  57.     </tr></table>
  58.     <!--  end of table navigation bar -->
  59.     <?php
  60. }
  61.  
  62. function load_javascript ()
  63. {
  64.     echo "\n<script language=\"javascript\" src=\"functions.js\" > </script>";
  65. }
  66.  
  67. function mysql_die($error = "")
  68. {
  69.     global $strError,$strSQLQuery, $strMySQLSaid, $strBack, $sql_query;
  70.  
  71.     echo "<b> $strError </b><p>";
  72.     if(isset($sql_query) && !empty($sql_query))
  73.     {
  74.         echo "$strSQLQuery: <pre>$sql_query</pre><p>";
  75.     }
  76.     if(empty($error))
  77.         echo $strMySQLSaid.mysql_error();
  78.     else
  79.         echo $strMySQLSaid.$error;
  80.     echo "<br><a href=\"javascript:history.go(-1)\">$strBack</a>";
  81.     include("footer.inc.php");
  82.     exit;
  83. }
  84.  
  85. function auth()
  86. {
  87.     global $cfgServer;
  88.     #$PHP_AUTH_USER = ""; No need to do this since err 401 allready clears that var
  89.     Header("status: 401 Unauthorized");
  90.     Header("HTTP/1.0 401 Unauthorized");
  91.     Header("WWW-authenticate: basic realm=\"phpMySQLAdmin on " . $cfgServer['host'] . "\"");
  92.     echo "<HTML><HEAD><TITLE>" . $GLOBALS["strAccessDenied"] . "</TITLE></HEAD>\n";
  93.     echo "<BODY BGCOLOR=#FFFFFF><BR><BR><CENTER><H1>" . $GLOBALS["strWrongUser"] . "</H1>\n";
  94.     echo "</CENTER></BODY></HTML>";
  95.     exit;
  96. }
  97.  
  98. // Use mysql_connect() or mysql_pconnect()?
  99. $connect_func = ($cfgPersistentConnections) ? "mysql_pconnect" : "mysql_connect";
  100. $dblist = array();
  101.  
  102. reset($cfgServers);
  103. while(list($key, $val) = each($cfgServers))
  104. {
  105.     // Don't use servers with no hostname
  106.     if (empty($val['host']))
  107.         unset($cfgServers[$key]);
  108. }
  109.  
  110. if(empty($server) || !isset($cfgServers[$server]) || !is_array($cfgServers[$server]))
  111.    $server = $cfgServerDefault;
  112.  
  113. if($server == 0)
  114. {
  115.     // If no server is selected, make sure that $cfgServer is empty
  116.     // (so that nothing will work), and skip server authentication.
  117.     // We do NOT exit here, but continue on without logging into
  118.     // any server.  This way, the welcome page will still come up
  119.     // (with no server info) and present a choice of servers in the
  120.     // case that there are multiple servers and '$cfgServerDefault = 0'
  121.     // is set.
  122.     $cfgServer = array();
  123. }
  124. else
  125. {
  126.     // Otherwise, set up $cfgServer and do the usual login stuff.
  127.     $cfgServer = $cfgServers[$server];
  128.  
  129.     if(isset($cfgServer['only_db']) && !empty($cfgServer['only_db']))
  130.         $dblist[] = $cfgServer['only_db'];
  131.  
  132.     if($cfgServer['adv_auth'])
  133.     {
  134.         if (empty($PHP_AUTH_USER) && isset($REMOTE_USER))
  135.             $PHP_AUTH_USER=$REMOTE_USER;
  136.         if(empty($PHP_AUTH_PW) && isset($REMOTE_PASSWORD))
  137.             $PHP_AUTH_PW=$REMOTE_PASSWORD;
  138.  
  139.         if(!isset($old_usr))
  140.         {
  141.             if(empty($PHP_AUTH_USER))
  142.             {
  143.                 $AUTH=TRUE;
  144.             }
  145.             else
  146.             {
  147.                 $AUTH=FALSE;
  148.             }
  149.         }
  150.         else
  151.         {
  152.             if($old_usr==$PHP_AUTH_USER)
  153.             {
  154.                 $AUTH=TRUE;
  155.                 unset($old_usr);
  156.             }
  157.             else
  158.             {
  159.                 $AUTH=FALSE;
  160.             }
  161.         }
  162.  
  163.         if($AUTH)
  164.         {
  165.             auth();
  166.         }
  167.         else
  168.         {
  169.             if(empty($cfgServer['port']))
  170.                 $dbh = $connect_func($cfgServer['host'],$cfgServer['stduser'],$cfgServer['stdpass']) or mysql_die();
  171.             else
  172.                 $dbh = $connect_func($cfgServer['host'].":".$cfgServer['port'],$cfgServer['stduser'],$cfgServer['stdpass']) or mysql_die();
  173.             $PHP_AUTH_USER = addslashes($PHP_AUTH_USER);
  174.             $PHP_AUTH_PW = addslashes($PHP_AUTH_PW);
  175.             $rs = mysql_db_query("mysql", "SELECT User, Password, Select_priv FROM user where User = '$PHP_AUTH_USER' AND Password = PASSWORD('$PHP_AUTH_PW')", $dbh) or mysql_die();
  176.             if(@mysql_numrows($rs) <= 0)
  177.             {
  178.                 auth();
  179.             }
  180.             else
  181.             {
  182.                 $row = mysql_fetch_array($rs);
  183.                 if ($row["Select_priv"] != "Y")
  184.                 {
  185.                     //correction uva 19991215 ---------------------------
  186.                     //previous code assumed database "mysql" admin table "db" column "db" contains
  187.                     //literal name of user database, and works if so.  mysql usage generally (and
  188.                     //uva usage specifically) allows this column to contain regular expressions.
  189.                     //(we have all databases owned by a given student/faculty/staff beginning with
  190.                     //user i.d. and governed by default by a single set of privileges with regular
  191.                     //expression as key.  this breaks previous code.  this maintenance is to fix code
  192.                     //to work correctly for regular expressions.
  193.                     //begin correction uva 19991215 pt. 1 ---------------------------
  194.                     //add "DISTINCT" to next line:  need single row only
  195.                     $rs = mysql_db_query("mysql", "SELECT DISTINCT Db FROM db WHERE Select_priv = 'Y' AND User = '$PHP_AUTH_USER'") or mysql_die();
  196.                     //end correction uva 19991215 pt. 1 -----------------------------
  197.                     if (@mysql_numrows($rs) <= 0)
  198.                     {
  199.                         $rs = mysql_db_query("mysql", "SELECT Db FROM tables_priv WHERE Table_priv like '%Select%' AND User = '$PHP_AUTH_USER'") or mysql_die();
  200.                         if (@mysql_numrows($rs) <= 0) {
  201.                             auth();
  202.                         }
  203.                         else
  204.                         {
  205.                             while ($row = mysql_fetch_array($rs))
  206.                                 $dblist[] = $row["Db"];
  207.                         }
  208.                     }
  209.                     else
  210.                     {
  211.                         //begin correction uva 19991215 pt. 2 ---------------------------
  212.                         //see pt. 1, above, for description of change
  213.                         $uva_mydbs = array(); // will use as associative array
  214.                         //of the following 2 code lines,
  215.                         //    the 1st is the only line intact from before correction, pt. 2
  216.                         //    the 2nd replaces $dblist[] = $row["Db"];
  217.                         //code following those 2 lines in correction, pt. 2, continues
  218.                         //populating $dblist[], as previous code did.  but it is now populated with
  219.                         //actual database names instead of with regular expressions.
  220.                         while($row = mysql_fetch_array($rs))
  221.                             $uva_mydbs[ $row["Db"] ] = 1;
  222.                         $uva_alldbs = mysql_list_dbs();
  223.                         while($uva_row = mysql_fetch_array($uva_alldbs))
  224.                         {
  225.                             $uva_db = $uva_row[0];
  226.                             if (isset($uva_mydbs[$uva_db]) && 1 == $uva_mydbs[$uva_db])
  227.                             {
  228.                                 $dblist[] = $uva_db;
  229.                                 $uva_mydbs[$uva_db] = 0;
  230.                             }
  231.                             else
  232.                             {
  233.                                 reset($uva_mydbs);
  234.                                 while (list($uva_matchpattern,$uva_value) = each($uva_mydbs))
  235.                                 {
  236.                                     $uva_regex = ereg_replace("%",".+",$uva_matchpattern);
  237.                                     if(ereg($uva_regex,$uva_db))
  238.                                     {
  239.                                         $dblist[] = $uva_db;
  240.                                         break;
  241.                                     }
  242.                                 }
  243.                             }
  244.                         }
  245.                         //end correction uva 19991215 pt. 2 -----------------------------
  246.                     }
  247.                 }
  248.             }
  249.         }
  250.         $cfgServer['user']=$PHP_AUTH_USER;
  251.         $cfgServer['password']=$PHP_AUTH_PW;
  252.     }
  253.  
  254.     if (empty($cfgServer['port']))
  255.         $link = $connect_func($cfgServer['host'], $cfgServer['user'], $cfgServer['password']) or mysql_die();
  256.     else
  257.         $link = $connect_func($cfgServer['host'].":".$cfgServer['port'], $cfgServer['user'], $cfgServer['password']) or mysql_die();
  258.  
  259.     $result = mysql_query("SELECT VERSION() AS version") or mysql_die();
  260.     $row = mysql_fetch_array($result);
  261.     define("MYSQL_MAJOR_VERSION", substr($row["version"], 0, 4));
  262. }
  263.  
  264. // -----------------------------------------------------------------
  265.  
  266. function display_table ($dt_result)
  267. {
  268.     global $cfgBorder, $cfgBgcolorOne, $cfgBgcolorTwo, $cfgMaxRows, $pos, $server, $db, $table, $sql_query, $sql_order, $cfgOrder, $cfgShowBlob, $goto;
  269.     global $strShowingRecords,$strSelectNumRows,$SelectNumRows,$strTotal,$strEdit,$strPrevious,$strNext,$strDelete,$strDeleted,$strPos1,$strEnd;
  270.     global $sessionMaxRows, $strGo, $strShow, $strRowsFrom;
  271.  
  272.     $cfgMaxRows = isset($sessionMaxRows) ? $sessionMaxRows : $cfgMaxRows;
  273.     $sessionMaxRows = isset($sessionMaxRows) ? $sessionMaxRows : $cfgMaxRows;
  274.  
  275.     load_javascript();
  276.  
  277.     $primary = false;
  278.     if(!empty($table) && !empty($db))
  279.     {
  280.         $result = mysql_db_query($db, "SELECT COUNT(*) as total FROM $table") or mysql_die();
  281.         $row = mysql_fetch_array($result);
  282.         $total = $row["total"];
  283.     }
  284.  
  285.     if(!isset($pos))
  286.         $pos = 0;
  287.     $pos_next = $pos + $cfgMaxRows;
  288.     $pos_prev = $pos - $cfgMaxRows;
  289.  
  290.     if(isset($total) && $total>1)
  291.     {
  292.         if(isset($SelectNumRows) && $SelectNumRows!=$total)
  293.             $selectstring = ", $SelectNumRows $strSelectNumRows";
  294.         else
  295.             $selectstring = "";
  296.     $se = isset($se) ? $se : "";
  297.     $lastShownRec = $pos_next  - 1;
  298.     show_message("$strShowingRecords $pos - $lastShownRec  ($se$total $strTotal$selectstring)");
  299.     }
  300.     else
  301.     {
  302.         show_message($GLOBALS["strSQLQuery"]);
  303.     }
  304.     ?>
  305.     </td>
  306.     <?php
  307.  
  308.     $field = mysql_fetch_field($dt_result);
  309.     $table = $field->table;
  310.     mysql_field_seek($dt_result, 0);
  311.     show_table_navigation($pos_next, $pos_prev, $dt_result);
  312.     ?>
  313.  
  314.     <table border="<?php echo $cfgBorder;?>">
  315.  
  316.     <tr>
  317.     <?php
  318.     while($field = mysql_fetch_field($dt_result))
  319.     {
  320.         if(@mysql_num_rows($dt_result)>1)
  321.         {
  322.             $sort_order=urlencode(" order by $field->name $cfgOrder");
  323.             echo "<th>";
  324.             if(!eregi("SHOW VARIABLES|SHOW PROCESSLIST|SHOW STATUS", $sql_query))
  325.                 echo "<A HREF=\"sql.php?server=$server&db=$db&pos=$pos&sql_query=".urlencode($sql_query)."&sql_order=$sort_order&table=$table\">";
  326.             echo $field->name;
  327.             if(!eregi("SHOW VARIABLES|SHOW PROCESSLIST|SHOW STATUS", $sql_query))
  328.                 echo "</a>";
  329.             echo "</th>\n";
  330.         }
  331.         else
  332.         {
  333.             echo "<th>$field->name</th>";
  334.         }
  335.         $table = $field->table;
  336.     }
  337.     echo "</tr>\n";
  338.     $foo = 0;
  339.  
  340.     while($row = mysql_fetch_row($dt_result))
  341.     {
  342.         $primary_key = "";
  343.         //begin correction uva 19991216 ---------------------------
  344.         //previous code assumed that all tables have keys, specifically
  345.         //that only the phpMyAdmin GUI should support row delete/edit
  346.         //only for such tables.  although always using keys is arguably
  347.         //the prescribed way of defining a relational table, it is not
  348.         //required.  this will in particular be violated by the novice.  we
  349.         //want to encourage phpMyAdmin usage by such novices.  so the code
  350.         //below has been changed to conditionally work as before when the
  351.         //table being displayed has one or more keys; but to display delete/edit
  352.         //options correctly for tables without keys.
  353.         //begin correction uva 19991216 pt. 1 ---------------------------
  354.         $uva_nonprimary_condition = "";
  355.         //end correction uva 19991216 pt. 1 -----------------------------
  356.         $bgcolor = $cfgBgcolorOne;
  357.         $foo % 2  ? 0: $bgcolor = $cfgBgcolorTwo;
  358.         echo "<tr bgcolor=$bgcolor>";
  359.         for($i=0; $i<mysql_num_fields($dt_result); $i++)
  360.         {
  361.             if(!isset($row[$i])) $row[$i] = '';
  362.                 $primary = mysql_fetch_field($dt_result,$i);
  363.             if($primary->numeric == 1)
  364.             {
  365.                 echo "<td align=right> $row[$i] </td>\n";
  366.                 if($sql_query == "SHOW PROCESSLIST")
  367.                     $Id = $row[$i];
  368.             }
  369.             elseif($cfgShowBlob == false && eregi("BLOB", $primary->type))
  370.             {
  371.                 echo "<td align=right> [BLOB] </td>\n";
  372.             }
  373.             else
  374.             {
  375.                 echo "<td> ".htmlspecialchars($row[$i])." </td>\n";
  376.             }
  377.             if($primary->primary_key > 0)
  378.                 $primary_key .= " $primary->name = '".addslashes($row[$i])."' AND";
  379.             //begin correction uva 19991216 pt. 2 ---------------------------
  380.             //see pt. 1, above, for description of change
  381.             $uva_nonprimary_condition .= " $primary->name = '".addslashes($row[$i])."' AND";
  382.             //end correction uva 19991216 pt. 2 -----------------------------
  383.         }
  384.         //begin correction uva 19991216 pt. 3 ---------------------------
  385.         //see pt. 1, above, for description of change
  386.         //prefer primary keys for condition, but use conjunction of all values if no primary key
  387.         if($primary_key) //use differently and include else
  388.             $uva_condition = $primary_key;
  389.         else
  390.             $uva_condition = $uva_nonprimary_condition;
  391.  
  392.         //   { code no longer conditional on $primary_key
  393.         //   $primary_key replaced with $uva_condition below
  394.         $uva_condition = urlencode(ereg_replace("AND$", "", $uva_condition));
  395.         $query = "server=$server&db=$db&table=$table&pos=$pos";
  396.         $goto = (isset($goto) && !empty($goto) && empty($GLOBALS["QUERY_STRING"])) ? $goto : "sql.php";
  397.         echo "<td><a href=\"tbl_change.php?primary_key=$uva_condition&$query&sql_query=".urlencode($sql_query)."&goto=$goto\">".$strEdit."</a></td>";
  398.         echo "<td><a href=\"sql.php?sql_query=".urlencode("DELETE FROM $table WHERE ").$uva_condition."&$query&goto=sql.php".urlencode("?$query&sql_query=$sql_query")."zero_rows=".urlencode($strDeleted)."&goto=db_details.php\">".$strDelete."</a></td>";
  399.         //   } code no longer condition on $primary_key
  400.         //end correction uva 19991216 pt. 3 -----------------------------
  401.  
  402.         if($sql_query == "SHOW PROCESSLIST")
  403.             echo "<td align=right><a href='sql.php?db=mysql&sql_query=".urlencode("KILL $Id")."&goto=main.php'>KILL</a></td>\n";
  404.         echo "</tr>\n";
  405.         $foo++;
  406.     }
  407.     echo "</table>\n";
  408.  
  409.     show_table_navigation($pos_next, $pos_prev, $dt_result);
  410. }//display_table
  411.  
  412. // Return $table's CREATE definition
  413. // Returns a string containing the CREATE statement on success
  414. function get_table_def($db, $table, $crlf)
  415. {
  416.     global $drop;
  417.  
  418.     $schema_create = "";
  419.     if(!empty($drop))
  420.         $schema_create .= "DROP TABLE IF EXISTS $table;$crlf";
  421.  
  422.     $schema_create .= "CREATE TABLE $table ($crlf";
  423.  
  424.     $result = mysql_db_query($db, "SHOW FIELDS FROM $table") or mysql_die();
  425.     while($row = mysql_fetch_array($result))
  426.     {
  427.         $schema_create .= "   $row[Field] $row[Type]";
  428.  
  429.         if(isset($row["Default"]) && (!empty($row["Default"]) || $row["Default"] == "0"))
  430.             $schema_create .= " DEFAULT '$row[Default]'";
  431.         if($row["Null"] != "YES")
  432.             $schema_create .= " NOT NULL";
  433.         if($row["Extra"] != "")
  434.             $schema_create .= " $row[Extra]";
  435.         $schema_create .= ",$crlf";
  436.     }
  437.     $schema_create = ereg_replace(",".$crlf."$", "", $schema_create);
  438.     $result = mysql_db_query($db, "SHOW KEYS FROM $table") or mysql_die();
  439.     while($row = mysql_fetch_array($result))
  440.     {
  441.         $kname=$row['Key_name'];
  442.         if(($kname != "PRIMARY") && ($row['Non_unique'] == 0))
  443.             $kname="UNIQUE|$kname";
  444.          if(!isset($index[$kname]))
  445.              $index[$kname] = array();
  446.          $index[$kname][] = $row['Column_name'];
  447.     }
  448.  
  449.     while(list($x, $columns) = @each($index))
  450.     {
  451.          $schema_create .= ",$crlf";
  452.          if($x == "PRIMARY")
  453.              $schema_create .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
  454.          elseif (substr($x,0,6) == "UNIQUE")
  455.             $schema_create .= "   UNIQUE ".substr($x,7)." (" . implode($columns, ", ") . ")";
  456.          else
  457.             $schema_create .= "   KEY $x (" . implode($columns, ", ") . ")";
  458.     }
  459.  
  460.     $schema_create .= "$crlf)";
  461.     return (stripslashes($schema_create));
  462. }
  463.  
  464. // Get the content of $table as a series of INSERT statements.
  465. // After every row, a custom callback function $handler gets called.
  466. // $handler must accept one parameter ($sql_insert);
  467. function get_table_content($db, $table, $handler)
  468. {
  469.     $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
  470.     $i = 0;
  471.     while($row = mysql_fetch_row($result))
  472.     {
  473.         set_time_limit(60); // HaRa
  474.         $table_list = "(";
  475.  
  476.         for($j=0; $j<mysql_num_fields($result);$j++)
  477.             $table_list .= mysql_field_name($result,$j).", ";
  478.  
  479.         $table_list = substr($table_list,0,-2);
  480.         $table_list .= ")";
  481.  
  482.         if(isset($GLOBALS["showcolumns"]))
  483.             $schema_insert = "INSERT INTO $table $table_list VALUES (";
  484.         else
  485.             $schema_insert = "INSERT INTO $table VALUES (";
  486.  
  487.         for($j=0; $j<mysql_num_fields($result);$j++)
  488.         {
  489.             if(!isset($row[$j]))
  490.                 $schema_insert .= " NULL,";
  491.             elseif($row[$j] != "")
  492.                 $schema_insert .= " '".addslashes($row[$j])."',";
  493.             else
  494.                 $schema_insert .= " '',";
  495.         }
  496.         $schema_insert = ereg_replace(",$", "", $schema_insert);
  497.         $schema_insert .= ")";
  498.         $handler(trim($schema_insert));
  499.         $i++;
  500.     }
  501.     return (true);
  502. }
  503.  
  504. function count_records ($db,$table)
  505. {
  506.     $result = mysql_db_query($db, "select count(*) as num from $table");
  507.     $num = mysql_result($result,0,"num");
  508.     echo $num;
  509. }
  510.  
  511. // Get the content of $table as a CSV output.
  512. // $sep contains the separation string.
  513. // After every row, a custom callback function $handler gets called.
  514. // $handler must accept one parameter ($sql_insert);
  515. function get_table_csv($db, $table, $sep, $handler)
  516. {
  517.     $result = mysql_db_query($db, "SELECT * FROM $table") or mysql_die();
  518.     $i = 0;
  519.     while($row = mysql_fetch_row($result))
  520.     {
  521.         set_time_limit(60); // HaRa
  522.         $schema_insert = "";
  523.         for($j=0; $j<mysql_num_fields($result);$j++)
  524.         {
  525.             if(!isset($row[$j]))
  526.                 $schema_insert .= "NULL".$sep;
  527.             elseif ($row[$j] != "")
  528.                 $schema_insert .= "$row[$j]".$sep;
  529.             else
  530.                 $schema_insert .= "".$sep;
  531.         }
  532.         $schema_insert = str_replace($sep."$", "", $schema_insert);
  533.         $handler(trim($schema_insert));
  534.         $i++;
  535.     }
  536.     return (true);
  537. }
  538.  
  539. function show_docu($link)
  540. {
  541.     global $cfgManualBase, $strDocu;
  542.  
  543.     if(!empty($cfgManualBase))
  544.         return("[<a href=\"$cfgManualBase/$link\">$strDocu</a>]");
  545. }
  546.  
  547. function show_message($message)
  548. {
  549.     if(!empty($GLOBALS['reload']) && ($GLOBALS['reload'] == "true"))
  550.     {
  551.         // Reload the navigation frame via JavaScript
  552.         ?>
  553.         <script language="JavaScript1.2">
  554.         parent.frames.nav.location.reload();
  555.         </script>
  556.         <?php
  557.     }
  558.     ?>
  559.     <div align="left">
  560.      <table border="<?php echo $GLOBALS['cfgBorder'];?>">
  561.       <tr>
  562.        <td bgcolor="<?php echo $GLOBALS['cfgThBgcolor'];?>">
  563.        <b><?php echo $message;?><b><br>
  564.        </td>
  565.       </tr>
  566.     <?php
  567.     if($GLOBALS['cfgShowSQL'] == true && !empty($GLOBALS['sql_query']))
  568.     {
  569.         ?>
  570.         <tr>
  571.         <td bgcolor="<?php echo $GLOBALS['cfgBgcolorOne'];?>">
  572.         <?php echo $GLOBALS['strSQLQuery'].":\n<br>", nl2br($GLOBALS['sql_query']);
  573.         if (isset($GLOBALS["sql_order"])) echo " $GLOBALS[sql_order]";
  574.         if (isset($GLOBALS["pos"])) echo " LIMIT $GLOBALS[pos], $GLOBALS[cfgMaxRows]";?>
  575.         </td>
  576.         </tr>
  577.         <?php
  578.     }
  579.     ?>
  580.     </table>
  581.     </div>
  582.     <?php
  583. }
  584.  
  585. function split_string($sql, $delimiter)
  586. {
  587.     $sql = trim($sql);
  588.     $buffer = array();
  589.     $ret = array();
  590.     $in_string = false;
  591.  
  592.     for($i=0; $i<strlen($sql); $i++)
  593.     {
  594.         if($sql[$i] == $delimiter && !$in_string)
  595.         {
  596.             $ret[] = substr($sql, 0, $i);
  597.             $sql = substr($sql, $i + 1);
  598.             $i = 0;
  599.         }
  600.  
  601.         if($in_string && ($sql[$i] == $in_string) && $buffer[0] != "\\")
  602.         {
  603.              $in_string = false;
  604.         }
  605.         elseif(!$in_string && ($sql[$i] == "\"" || $sql[$i] == "'") && (!isset($buffer[0]) || $buffer[0] != "\\"))
  606.         {
  607.              $in_string = $sql[$i];
  608.         }
  609.         if(isset($buffer[1]))
  610.             $buffer[0] = $buffer[1];
  611.         $buffer[1] = $sql[$i];
  612.      }
  613.  
  614.     if (!empty($sql))
  615.     {
  616.         $ret[] = $sql;
  617.     }
  618.  
  619.     return($ret);
  620. }
  621.  
  622. // -----------------------------------------------------------------
  623. ?>